from faker import Faker
from faker.providers import BaseProvider
import random

# 自定义中文身份证号生成器（Faker 默认不包含中文身份证）
class ChinaIDCardProvider(BaseProvider):
    def china_id_card(self):
        # 生成18位身份证号（简单示例，不校验合法性）
        region_code = '110101'  # 区域代码（如北京市东城区）
        birth_date = self.generator.date_of_birth().strftime('%Y%m%d')
        sequence = f'{random.randint(0, 999):03d}'
        checksum = random.choice(['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'X'])
        return f'{region_code}{birth_date}{sequence}{checksum}'

# 初始化 Faker，支持中英文
fake_en = Faker('en_US')
fake_cn = Faker('zh_CN')
fake_cn.add_provider(ChinaIDCardProvider)  # 添加自定义身份证生成器

# 生成英文数据
print("----- 英文数据 -----")
print(f"Name: {fake_en.name()}")
print(f"Email: {fake_en.email()}")
print(f"Phone: {fake_en.phone_number()}")
print(f"SSN: {fake_en.ssn()}\n")

# 生成中文数据
print("----- 中文数据 -----")
print(f"姓名: {fake_cn.name()}")
print(f"邮箱: {fake_cn.email()}")
print(f"电话: {fake_cn.phone_number()}")
print(f"身份证号: {fake_cn.china_id_card()}\n")

# 生成中英文混合数据
print("----- 中英文混合数据 -----")
name = f"{fake_cn.name()} ({fake_en.name()})"
email = fake_en.email()
phone = f"+86 {fake_cn.phone_number()}"
id_card = fake_cn.china_id_card()
print(f"Name: {name}\nEmail: {email}\nPhone: {phone}\nID Card: {id_card}")